// import router, { constantRoutes } from '@/router/index.js'
// import store from '@/store/index.js'
// import nprogress from 'nprogress'
// import 'nprogress/nprogress.css'
// const whileList = ['/404', '/login']
// // 定义一个 路由 守卫 来做点击跳转路由时的判断操作
// router.beforeEach(async(to, from, next) => {
//   nprogress.start()
//   //  to 表示 到哪里去 from 表示 从哪里来？ next 是否去下一步 路由。或者是去往哪一个路由
//   // 如果 用户 登录了 那么 也就是存在 token 那么就可以直接进入 首页 以及其他页面
//   if (store.getters.token) {
//     console.log(router)
//     //  ---- 是否 每一页都要获取到用户 信息？这样我们就需要做一些判断，在获取到了用户信息的页面，不在请求 第二次获取信息
//     // 判断 用户信息中是否存在 如果不存在就去获取用户信息
//     if (!store.getters.userId) {
//       // 从 vuex中actions方法中获取 到 菜单 标识
//       /**
//        *
//       const { roles: { menus }} = await store.dispatch('user/getUserInfo')
//       console.log('用户信息返回结果', menus)
//       // 将 页面 侧边 导航菜单 里的选项 进行筛选。
//       // const filterRouters =
//       const filterRouters = asyncRoutes.filter(t => menus.includes(t.name))
//       console.log('赛选完成的结果router', filterRouters)
//       // 添加 路由
//       // 主要执行addRouters 后 router.options.routes没有发生改变
//       router.addRoutes([...filterRouters, { path: '*', redirect: '/404', hidden: true }])
//       // 解决菜单显示问题
//       router.options.routes = [...constantRoutes, ...filterRouters]
//       return next(to.path)
//        */
//       // ------------方法2
//       // 方式2-标准(模块化)写法
//       // 1.获取标识
//       const { roles: { menus }} = await store.dispatch('user/getUserInfo')
//       // 2.筛选菜单
//       const filterRoutes = await store.dispatch('permission/filterRoutes', menus)
//       console.log('filterRoutes', filterRoutes)
//       // 3.添加路由
//       // 主要执行addRoutes后router.options.routes没有发生改变
//       router.addRoutes([...filterRoutes,
//       // 404 page must be placed at the end !!!
//         { path: '*', redirect: '/404', hidden: true }
//       ])
//       // 4.解决动态路由刷新404
//       return next(to.path)
//     }
//     // 或者是 去往任何一个页面
//     next()
//   } else {
//     //   当用户没有登录的 时候，那么就有可能去往 路由白名单里的任何一个页面。
//     // 判断数组当中有没有特定值-方式1-通过indexOf
//     // whiteList.indexOf(to.path) > -1
//     // 判断数组当中有没有特定值-方式2-通过some
//     // whiteList.some(t => t === to.path)
//     if (whileList.includes(to.path)) {
//       next()
//     } else {
//       next('/login')
//     }
//   }
// })

// router.afterEach(() => {
//   nprogress.done()
// })

import store from '@/store/index.js'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import router from '@/router/index.js'
// 全局的路由守卫
// 前置守卫(跳转之前)
const whiteList = ['/404', '/login']
router.beforeEach(async(to, from, next) => {
  nprogress.start()
  if (store.getters.token) {
    // 判断有没有获取用户信息
    if (!store.getters.userId) {
      // 方式1-简化写法
      /*
      // 1.获取标识
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      // 2.筛选菜单
      const filterRoutes = asyncRoutes.filter(t => menus.includes(t.name))
      // 3.添加路由
      // 主要执行addRoutes后router.options.routes没有发生改变
      router.addRoutes([...filterRoutes,
        // 404 page must be placed at the end !!!
        { path: '*', redirect: '/404', hidden: true }
      ])
      // 4.解决菜单问题
      router.options.routes = [...constantRoutes, ...filterRoutes]
      // 5.解决动态路由刷新404
      return next(to.path)
      */
      // 方式2-标准(模块化)写法
      // 1.获取标识
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      // 2.筛选菜单
      const filterRoutes = await store.dispatch('permission/filterRoutes', menus)
      console.log('filterRoutes', filterRoutes)
      // 3.添加路由
      // 主要执行addRoutes后router.options.routes没有发生改变
      router.addRoutes([...filterRoutes,
      // 404 page must be placed at the end !!!
        { path: '*', redirect: '/404', hidden: true }
      ])
      // 4.解决动态路由刷新404
      return next(to.path)
    }
    // 去登录页面->首页
    if (to.path === '/login') return next('/')
    // 去其他页面,直接去
    next()
  } else {
    if (whiteList.includes(to.path)) return next()
    // 是否在白名单里面,如果在里面直接去
    // 跳转到登录页面
    next('/login')
  }
})
router.afterEach(() => {
  nprogress.done()
})
